home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 8
/
FM Towns Free Software Collection 8.iso
/
t_os
/
adv2
/
adv2.bas
next >
Wrap
BASIC Source File
|
1994-06-01
|
9KB
|
229 lines
10 '***********************************
20 ' F-BASIC386 V2.1 L10以降対応
30 ' アドベンチャー2 システム
40 ' 【めちゃんこべえしっく言語】
50 ' Copyright(C) 1994 おこめ
60 '***********************************
70 CLEAR ,,512,340000,0,450000:DEFINT A-Z:DEFLNG M,I:ON ERROR GOTO *ERR
80 DIM TXT$(8000),A$(128),B$(255),M(10000),I&(10),T(20000)
90 DIM S(100000),ST(256),LB$(500),LB(500)
100 COLOR 7,0,7,4:WIDTH 80,25:CLS
110 SCREEN 1,0,3,1:SCREEN@1:LOAD@ "GAMEN.TIF":SCREEN 1,1:SCREEN@0
120 IP=0:IPS=-1:SP=0:LP=500:I=0
130 TX=172:TY=343:TX2=620:TY2=470:MX=TX:MY=TY:MSG=7
140 NA$="GAME.AGS"
150 OPEN "I",#1,NA$
160 IF EOF(1) THEN CLOSE:GOTO 180
170 LINE INPUT #1,TXT$(I):I=I+1:GOTO 160
180 *MAIN A$=TXT$(IP)
190 IF A$="" THEN GOSUB *MSG:GOTO 400 ELSE IF KTYPE(A$,1)=1 OR ASC(A$)=47 OR ASC(A$)=36 THEN GOSUB *MSG:GOTO 400
200 GOSUB *GVA
210 IF INSTR(A$(0),"=") THEN GOSUB *M0
220 IF INSTR(A$(0),".") THEN GOSUB *GLOAD
230 IF A$(0)="#" THEN GOSUB *MSGW
240 IF A$(0)="$" THEN GOSUB *KANE2
250 IF A$(0)="ITEMSET" THEN GOSUB *ITEMSET
260 IF A$(0)="GO" THEN GOSUB *GO
270 IF A$(0)="GOTO" THEN GOSUB *GOT
280 IF A$(0)="GOSUB" THEN GOSUB *GOS
290 IF A$(0)="CMD" OR A$(0)="CMDS" THEN GOSUB *CMD
300 IF A$(0)="ITEM" THEN GOSUB *ITM
310 IF A$(0)="ON" THEN GOSUB *ON
320 IF A$(0)="CLS" THEN GOSUB *CLS
330 IF A$(0)="IF" THEN GOSUB *IF
340 IF A$(0)="RET" THEN GOSUB *RET
350 IF A$(0)="RETURN" THEN GOSUB *RETU
360 IF A$(0)="WAIT" THEN GOSUB *WAIT
370 IF A$(0)="LOAD" THEN GOSUB *DLOAD
380 IF A$(0)="SAVE" THEN GOSUB *DSAVE
390 IF A$(0)="END" THEN *END
400 IP=IP+1:GOTO 180
410 *ERR IF ERR=64 AND ERL=2180 THEN KILL "AGS1"+N$:KILL "AGS2"+N$:KILL "ADVG"+N$:RESUME
420 SYMBOL(0,0),STR$(ERR)+STR$(ERL),2,2,2:END
430 *GVA I=0:J=0:A$=TXT$(IP):A$(0)=""
440 IF A$="" THEN A$(I)="":A$=TXT$(IP):RETURN
450 K=INSTR(A$," "):K2=INSTR(A$,",")
460 IF K2>0 AND K>K2 THEN K=K2
470 IF K=1 THEN J=1:A$=MID$(A$,2):GOTO 440
480 IF J=1 THEN J=0:IF A$(0)<>"" THEN I=I+1:A$(I)=""
490 IF K=0 THEN A$(I)=A$:A$(I+1)="":A$=TXT$(IP):RETURN
500 A$(I)=A$(I)+LEFT$(A$,1):A$=MID$(A$,2):GOTO 440
510 *LAB IF LEFT$(A$(1),1)="M" THEN A$=A$(1):J=1:GOTO *SK
520 J=0:I=SEARCH(LB$,A$(1),LP)
530 IF I=-1 THEN
540 J=SEARCH(TXT$,A$(1)):I=J
550 IF J=-1 THEN RETURN ELSE LP=LP-1:LB$(LP)=A$(1):LB(LP)=J:I=J
560 ELSE
570 I=LB(I)
580 ENDIF
590 RETURN
600 *MSG GOSUB *MSGS
610 B$=KLEFT$(A$,1):A$=KMID$(A$,2)
620 IF B$="/" THEN A$(0)=A$:J=1:A$(1)=A$:GOSUB *SK:MSG=I:A$=KMID$(A$(0),KLEN(STR$(I))):GOTO 680
630 IF B$="$" THEN A$(0)=A$:J=1:A$(1)=A$:GOSUB *KANE:A$=A$(0):GOTO 680
640 IF B$<>" " AND B$<>" " THEN BEEP 1:SYMBOL(MX,MY),B$,1,1,7:BEEP 0
650 MX=MX+LEN(B$)*8
660 IF MX>TX2-15 AND LEN(A$) THEN MX=TX:MY=MY+17
670 GOSUB *MSGS
680 IF PTRIG(1) AND 2 THEN 700
690 WAIT MSG-1
700 IF A$<>"" THEN 610
710 MX=TX:MY=MY+17:RETURN
720 *MSGS IF MY<TY2-15 THEN RETURN
730 MY=MY-17:GET@A(170,343)-(629,496),T
740 FOR I=1 TO 17 STEP 2
750 PUT@A(170,343)-(629,496),T,,,,,I*116:NEXT:RETURN
760 *MSGW
770 IF (PTRIG(1) AND 1)=0 THEN 770
780 IF PTRIG(1) AND 1 THEN 780
790 RETURN
800 *KANE A$=AKCNV$(MID$(STR$(M(KNP)),2+(LEFT$(STR$(KNP),1)="-")))+A$:RETURN
810 *KANE2 A$=A$(1):J=1:GOSUB *SK:KNP=I:RETURN
820 *GO GOSUB *LAB:IF I>-1 THEN IPS=IP:IP=I:RETURN ELSE END
830 *RET IF IPS<>-1 THEN IP=IPS:IPS=-1
840 RETURN
850 *GOT GOSUB *LAB:IF I>-1 THEN IP=I
860 RETURN
870 *GOS GOSUB *LAB:IF I>-1 THEN SP=SP+1:ST(SP)=IP:IP=I
880 RETURN
890 *RETU IP=ST(SP):SP=SP-1:RETURN
900 *END END
910 *GLOAD A$=MID$(A$(0),INSTR(A$(0),".")+1)
920 SCREEN 1,0
930 IF A$="TIF" OR A$="JPG" THEN LOAD@ A$(0)
940 IF A$="SND" THEN PLAY OFF:LOAD@ A$(0),S:PCMPLAY S,127
950 IF A$="EUP" THEN PLAY OFF:LOAD@ A$(0),S:PLAY@ S
960 IF A$="AGS" THEN GOSUB *NFIL
970 IF A$="MVE" THEN GOSUB *MVEP
980 SCREEN 1,1:RETURN
990 *NFIL NA$=A$(0):IPS=-1:SP=0:GOSUB 1000:GOTO *GOT
1000 I=0:OPEN "I",#1,NA$
1010 WHILE EOF(1):LINE INPUT #1,TXT$(I):I=I+1:WEND:CLOSE #1
1020 LP=500:LB$(LP)="":I=0:RETURN
1030 *MVEP GET@A(0,0)-(319,239),S:PLAY OFF
1040 MOVIE OPEN A$(0)
1050 MOVIE INFO 1,I&
1060 I=85-I&(7)/2:IF I<0 THEN I=0
1070 DEF MOVIE 1,(160-I&(6)/2,I)
1080 MOVIE PLAY
1090 MOVIE CLOSE
1100 PUT@A(0,0)-(319,239),S
1110 RETURN
1120 *ON IF A$(1)="CMD" OR A$(1)="CMDS" THEN A$(0)=A$(1):A$(1)=A$(2):A$(2)=A$(3):GOSUB *CMDS:I=KC:J=1 ELSE A$=A$(1):J=1:GOSUB *SK:J=0
1130 A$(0)=A$(2+J):'SYMBOL(0,20),A$(0),2,2,7
1140 IF LEFT$(A$(0),2)="GO" THEN J=J+1
1150 J=I+J+1
1160 IF I>0 AND SEARCH(A$,"")>J THEN
1170 A$(1)=A$(J)
1180 IF INSTR(A$(1),".") THEN A$(0)=A$(1):GOTO *GLOAD
1190 IF A$(0)="GOTO" THEN *GOT
1200 IF A$(0)="GOSUB" THEN *GOS
1210 GOTO *GO
1220 ENDIF
1230 RETURN
1240 IF I>0 AND SEARCH(A$,"")>I+2 THEN A$(1)=A$(I+2):GOTO *GO
1250 RETURN
1260 *CMD SWAP A$(1),A$(2):GOSUB *CMDS:J=2:GOSUB *SK:M(I)=KC:RETURN
1270 *CMDS GOSUB *LAB:J=1
1280 IF CMDLV<>I THEN KC=1:CMDLV=I
1290 LINE(0,343)-(TX-10,479),PSET,0,BF
1300 IF TXT$(I+J)="#" OR TXT$(I+J)="" THEN 1330
1310 SYMBOL(40,328+J*17),TXT$(I+J),1,1,7
1320 J=J+1:GOTO 1300
1330 IF PAD(1)+PTRIG(1) THEN 1330
1340 SYMBOL(22,328+KC*17),"◆",1,1,7
1350 KKK=0:P=P+T
1360 WHILE P AND (KKK<1000)
1370 P=PAD(1)+PTRIG(1):KKK=KKK+1:WEND
1380 KC2=KC:P=PAD(1):T=PTRIG(1)
1390 IF P+T=0 THEN 1380
1400 IF P=1 AND KC>1 THEN KC=KC-1
1410 IF P=5 AND KC<J-1 THEN KC=KC+1
1420 IF (T AND 1)=1 THEN 1450
1430 IF A$(0)="CMDS" AND T=2 THEN KC=0:GOTO 1450
1440 SYMBOL(22,328+KC2*17),"◆",1,1,0:GOTO 1330
1450 A$=A$(2):SYMBOL(22,328+KC2*17),"◆",1,1,0:RETURN
1460 *M0 A$=TXT$(IP):J2=INSTR(A$,"="):J=J2+1:GOSUB *SK
1470 K2=I:J=2:A$=LEFT$(TXT$(IP),J2-1):GOSUB *SK:M(I)=K2:RETURN
1480 *SKGVA I=0:Z=1:B$(0)=""
1490 IF A$="" THEN RETURN
1500 IF J>LEN(A$) THEN B$(I+1)="":RETURN
1510 IF KTYPE(A$,J) THEN B$(I+1)="":RETURN
1520 IF MID$(A$,J,1)=" " THEN J=J+1:GOTO 1520
1530 IF INSTR("*/+-^=&|M()@",MID$(A$,J,1)) THEN
1540 IF Z=0 THEN I=I+1
1550 B$(I)=MID$(A$,J,1):J=J+1:I=I+1:Z=1:B$(I)="":GOTO 1500
1560 ENDIF
1570 B$(I)=B$(I)+MID$(A$,J,1):J=J+1:Z=0
1580 GOTO 1500
1590 *D2 HZ=2
1600 ST(SP+1)=I:J=J-1:B$(J-HZ)=STR$(I):I=0
1610 I=I+1:B$(J-HZ+I)=B$(J+I):IF B$(J+I)<>"" THEN 1610
1620 I=ST(SP+1):J=J-HZ+1:RETURN
1630 *SK GOSUB *SKGVA:J=0:K=I:F=0
1640 GOSUB 1970
1650 ST(SP+1)=F:SP=SP+2:ST(SP)=I
1660 IF B$(J)="+" AND F<=8 THEN
1670 F=8:GOSUB 1960:I=ST(SP)+I:GOSUB *D2
1680 ELSE IF B$(J)="*" AND F<=9 THEN
1690 F=9:GOSUB 1960:I=ST(SP)*I:GOSUB *D2
1700 ELSE IF B$(J)="/" AND F<=9 THEN
1710 F=9:GOSUB 1960:I=ST(SP)/I:GOSUB *D2
1720 ELSE IF B$(J)="%" AND F<=9 THEN
1730 F=9:GOSUB 1960:I=ST(SP) MOD I:GOSUB *D2
1740 ELSE IF B$(J)="^" AND F<=10 THEN
1750 F=10:GOSUB 1960:I=ST(SP)^I:GOSUB *D2
1760 ELSE IF B$(J)="-" AND F<=8 THEN
1770 F=8:GOSUB 1960:I=ST(SP)-I:GOSUB *D2
1780 ELSE IF B$(J)=">" AND F<=7 THEN
1790 F=7:GOSUB 1960:I=(ST(SP)>I):GOSUB *D2
1800 ELSE IF B$(J)="<" AND F<=7 THEN
1810 F=7:GOSUB 1960:I=(ST(SP)<I):GOSUB *D2
1820 ELSE IF B$(J)="=" AND F<=6 THEN
1830 F=6:GOSUB 1960:I=(ST(SP)=I):GOSUB *D2
1840 ELSE IF B$(J)="&" AND F<=5 THEN
1850 F=5:GOSUB 1960:I=ST(SP) AND I:GOSUB *D2
1860 ELSE IF B$(J)="X" AND F<=4 THEN
1870 F=4:GOSUB 1960:I=ST(SP) XOR I:GOSUB *D2
1880 ELSE IF B$(J)="|" AND F<=3 THEN
1890 F=3:GOSUB 1960:I=ST(SP) OR I:GOSUB *D2
1900 ELSE IF B$(J)="A" AND F<=2 THEN
1910 F=2:GOSUB 1960:I=((ST(SP) AND I)<>0):GOSUB *D2
1920 ELSE IF B$(J)="O" AND F<=1 THEN
1930 F=1:GOSUB 1960:I=((ST(SP) OR I)<>0):GOSUB *D2
1940 ENDIF
1950 F=ST(SP-1):SP=SP-2:RETURN
1960 J=J+1
1970 IF B$(J)="M" THEN '変数
1980 IF B$(J+1)="(" THEN J=J+2:GOSUB 1640:J=J+1:HZ=3:GOSUB 1600:J=J-1 ELSE J=J+1:I=VAL(B$(J))
1990 I=M(I)
2000 ELSE IF B$(J)="(" THEN
2010 J=J+1:GOSUB 1640:J=J+1:GOSUB *D2:J=J-1
2020 ELSE IF B$(J)="*" OR B$(J)="@" THEN
2030 WHILE B$(J+1)<>"":J=J+1:B$(J)=B$(J-1)+B$(J):WEND
2040 A$(1)=B$(J):GOSUB *LAB
2050 ELSE
2060 IF B$(J)="-" THEN J=J+1:I=-VAL(B$(J)) ELSE I=VAL(B$(J))
2070 ENDIF
2080 J=J+1:RETURN
2090 *IF A$=A$(1):J=1:GOSUB *SK:IF I=0 THEN RETURN
2100 IF A$(2)="THEN" THEN A$(2)=A$(3):A$(3)=A$(4):A$(4)=A$(5)
2110 IF LEFT$(A$(2),2)="GO" THEN A$(1)=A$(3) ELSE A$(1)=A$(2)
2120 IF A$(2)="GOTO" THEN *GOT
2130 IF A$(2)="GOSUB" THEN *GOS
2140 GOTO *GO
2150 *CLS LINE(TX,343)-(639,479),PSET,0,BF:MY=343:RETURN
2160 *DSAVE A$=A$(1):J=1:GOSUB *SK:ST(0)=SP
2170 N$=RIGHT$("0000"+HEX$(I),4)+".DAT"
2180 SAVE@ "AGS1"+N$,M:SAVE@ "AGS2"+N$,ST
2190 OPEN "O",#1,"ADVG"+N$:PRINT #1,NA$:PRINT #1,MKL$(IP);MSG
2200 CLOSE #1:I=1:RETURN
2210 *DLOAD A$=A$(1):J=1:GOSUB *SK
2220 N$=RIGHT$("0000"+HEX$(I),4)+".DAT"
2230 LOAD@ "AGS1"+N$,M:LOAD@ "AGS2"+N$,ST:SP=ST(0)
2240 OPEN "I",#1,"ADVG"+N$:LINE INPUT #1,NA$:A$=INPUT$(4,1):IP=CVL(A$)
2250 INPUT #1,MSG:CLOSE #1:GOSUB 1000:I=2:RETURN
2260 *WAIT A$=A$(1):J=1:GOSUB *SK:WAIT I:RETURN
2270 *ITEMSET A$=A$(1):GOSUB *SK:ITM=I:RETURN
2280 *ITM RETURN